package Resource; import java.io.BufferedInputStream; import java.io.FileInputStream; import java.net.URL; import java.util.HashMap; import javax.sound.sampled.AudioInputStream; import javax.sound.sampled.AudioSystem; import javax.sound.sampled.Clip; public class SoundEffectManager { private static SoundEffectManager _instance = null; private HashMap<SoundEffectT, Clip> soundEffectMap; private SoundEffectManager() { soundEffectMap = new HashMap<SoundEffectT, Clip>(); loadAllSoundEffect(); } private void loadAllSoundEffect() { for (SoundEffectT soundEffect : SoundEffectT.values()) { loadSoundEffect(soundEffect); } } private void loadSoundEffect(SoundEffectT soundEffect) { Clip clip; AudioInputStream audioInputStream; try { String audioFile = soundEffect.getFilePath(); URL url = ResourceManager.getInstance().getURL(audioFile); if (url != null) { audioInputStream = AudioSystem.getAudioInputStream(url); } else { audioInputStream = AudioSystem .getAudioInputStream(new BufferedInputStream( new FileInputStream(System .getProperty("user.dir") + audioFile))); } clip = AudioSystem.getClip(); clip.open(audioInputStream); soundEffectMap.put(soundEffect, clip); } catch (Exception e) { e.printStackTrace(); } } public synchronized static SoundEffectManager getInstance() { if (_instance == null) _instance = new SoundEffectManager(); return _instance; } public void playSoundEffect(SoundEffectT type) { if (soundEffectMap.containsKey(type) == false) loadSoundEffect(type); new Thread(new Runnable() { @Override public void run() { Clip clip = soundEffectMap.get(type); clip.stop(); clip.setFramePosition(0); clip.start(); do { try { Thread.sleep(50); } catch (Exception e) { e.printStackTrace(); break; } } while (clip.isActive()); clip.stop(); } public Runnable init(SoundEffectT type) { this.type = type; return this; } private SoundEffectT type; }.init(type)).start(); } }